线性回归的R实现与结果解读
引言:前面我们学习了最小二乘法与直线回归{最小二乘法与线性回归},也学习了如何评判直线的拟合效果,以及拟合效果是否具有显著性{线性回归中的R方与R方显著性}。
接着我们来实战一下,主要了解一下R语言如何实现线性回归,以及尝试解释线性回归的结果。
1. 简单与多重线性回归的异同点
1.1 简单线性回归与多重线性回归参数个数比较:
同:二者均有一个结局变量(如小鼠体长)。
异:简单线性回归仅有一个用于预测结局变量的变量(小鼠体重);但多重线性回归可有2个及以上用于预测结局变量的变量(小鼠体重和尾长)。
1.2 计算简单线性回归和多重线性回归的R2的方法一致。但是对于多重简单线性回归,需要计算校正的R2以补偿方程中更多的参数。
1.3 计算简单线性回归和多重线性回归的F值和p值的方法一致。
对于左侧简单线性回归和右侧多重线性回归均有:
不考虑小鼠体积与小鼠体重的关系时,SS(mean)为基于小鼠体重均值直线的残差平方和,p(mean)为均值直线的参数个数(即1个截距参数,对应参数个数为1)。
考虑小鼠体积与小鼠体重的关系时,SS(fit)为基于拟合直线的残差平方和。
n,对应样本的个数。
对于左侧的简单线性回归:
p(fit)为拟合直线的参数个数(即1个截距参数+1个斜率参数,对应总参数个数为2)。
对于右侧的多重线性回归:
p(fit)为拟合直线的参数个数(即1个截距参数+多个斜率参数,此处有2个斜率参数,对应总参数个数为3)。
2. 简单与多重线性回归直接比较的意义
例如:在简单线性回归中,我们用小鼠的体重估计小鼠的身长(body length);而在多重线性回归中,我们用小鼠的体重和尾长(tail length)共同估计小鼠的身长。通过两种模型的比较,可以探究是否需要额外搜集尾巴长度这一数据?
演绎推理:拟合直线可以和均值直线(最简单的拟合直线)进行比较,那么两不同的拟合直线也能进行比较。
在我们前面的讨论中,相对于预测数据(y轴数据)的均值直线,可以计算出拟合直线(简单线性回归或多重线性回归)的R2,即拟合直线所能解释的预测数据的变异百分比;此外,利用自由度,可以计算F值和P值,以探究拟合直线是否有显著性。 同理:利用多重线性回归直线与简单线性回归的数据,可计算出相对于简单直线回归,多重线性回归所能解释的更多的变异,以及F值与p值。
在计算的过程中,我们仅需要将原来的均值直线替换成简单线性回归直线的数据,余处理方式不变,如下:
结论:以上的比较,是简单线性回归与多重线性回归的直接比较。
如果相对于简单线性回归,多重线性回归增加的R2非常大,且p值非常小,那么就可以说明新增变量(如小鼠尾长)意义重大。
相反,则说明新增变量毫无意义。
3. 简单线性回归 in R,数据来源于原视频
# 第一步:生成关于小鼠体重与体积的一组数据
mouse.data <- data.frame(
weight=c(0.9, 1.8, 2.4, 3.5, 3.9, 4.4, 5.1, 5.6, 6.3),
size=c(1.4, 2.6, 1.0, 3.7, 5.5, 3.2, 3.0, 4.9, 6.3))
mouse.data
# weight size
# 1 0.9 1.4
# 2 1.8 2.6
# 3 2.4 1.0
# 4 3.5 3.7
# 5 3.9 5.5
# 6 4.4 3.2
# 7 5.1 3.0
# 8 5.6 4.9
# 9 6.3 6.3
# 第二步:绘制散点图,观察数据的整体变化趋势
plot(mouse.data$weight, mouse.data$size)
注:在lm()
线性回归中,R中默认添加截距和斜率参数,故构建的模型
size~weight
,详细展开,即为:size=y-intercept(截距)+slope(斜率)x weight 然后R使用最小二乘法与原理求出残差平方和最小的拟合直线参数,包括截距和斜率。
# 第三步:创建线性回归模型,即进行线性回归
mouse.regreSSion <- lm(size ~ weight, data=mouse.data)
## 对模型进行汇总
summary(mouse.regreSSion)
# Call:(展示已构建的模型)
# lm(formula = size ~ weight, data = mouse.data)
#
# Residuals:(依次展示残差的最小值、四分位数、最大值)
# Min 1Q Median 3Q Max
# -1.5482 -0.8037 0.1186 0.6186 1.8852
#
# Coefficients:(展示模型中的参数的估计值,标准误,统计检验t值,统计检验的p值)
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 0.5813 0.9647 0.603 0.5658
# weight 0.7778 0.2334 3.332 0.0126 *
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (标记显著性水平对应的符号)
#
# Residual standard error: 1.19 on 7 degrees of freedom(残差标准误与自由度)
# Multiple R-squared: 0.6133, Adjusted R-squared: 0.558 (模型的R方与校正的R方)
# F-statistic: 11.1 on 1 and 7 DF, p值: 0.01256(模型总体的F检验,F值,p值)
模型汇总结果解读:
对构建模型整体的判定: 该模型的R2=0.6133(因为该模型为简单线性模型,故我们关注未校正的自由度即可),p值= 0.01256。故我们可以认为基于小鼠的体重可以较好的预测小鼠的体积。
对模型中参数的判定:
截距:对应的估计值为0.5813,p值=0.5658。因为我们通常不关注斜率,故不论其是否有意义均可 weight的斜率:对应的估计值为0.7778,p值=0.0126。 注意:因为该模型为简单线性模型,故对斜率的检验结果与对模型整体的检验结果等价,p值相等且有显著意义。
# 第四步:将拟合的直线添加至散点图中
abline(mouse.regreSSion, col="red")
4. 多重线性回归 in R,数据来源与原视频
# 第一步:导入数据。在简单线性回归的数据的基础上,添加小鼠尾长的数据。探究小鼠尾长与小鼠重量预测小鼠体积的多重线性回归模型
mouse.data <- data.frame(
size = c(1.4, 2.6, 1.0, 3.7, 5.5, 3.2, 3.0, 4.9, 6.3),
weight = c(0.9, 1.8, 2.4, 3.5, 3.9, 4.4, 5.1, 5.6, 6.3),
tail = c(0.7, 1.3, 0.7, 2.0, 3.6, 3.0, 2.9, 3.9, 4.0))
# 第二步:绘制散点图,观察数据的变化趋势
plot(mouse.data)
# 第三步:构建多重线性回归模型,即进行多重线性回归
multiple.regreSSion <- lm(size ~ weight + tail, data=mouse.data)
#在R中,lm()中构造的模型size~ weight + tail,对应的详细模为:
#Size=y-intercept +slope1(斜率1) x weight + slope2(斜率2) x tail
summary(multiple.regreSSion)
## 对模型进行汇总(仅展示与简单线性回归模型有区别的结果解读)
# Call:
# lm(formula = size ~ weight + tail, data = mouse.data)
#
# Residuals:
# Min 1Q Median 3Q Max
# -0.99928 -0.38648 -0.06967 0.34454 1.07932
#
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 0.7070 0.6510 1.086 0.3192
# weight -0.3293 0.3933 -0.837 0.4345 (p值>0.05,说明含有体重较不含体重的模型无显著优势)
# tail 1.6470 0.5363 3.071 0.0219 *(p值<0.05,说明含有尾长较不含尾长的模型有预测优势)
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 0.8017 on 6 degrees of freedom(展示模型的自由度和残差)
# Multiple R-squared: 0.8496, Adjusted R-squared: 0.7995(多变量模型更应关注校正的R方)
# F-statistic: 16.95 on 2 and 6 DF, p值: 0.003399(对模型的整体F检验和P值)
多重回归模型汇总结果解读:
对构建模型整体的判定: 该模型的校正R2=0.7995(因为该模型为多重线性模型,故我们需要关注校正的自由度),p值= 0.003399。故我们可以认为基于小鼠的体重和尾长,可以较好的预测小鼠的体积。
对模型中参数的判定:
截距:对应的估计值为0.7070,p值=0.3192。因为我们通常不关注斜率,故不论其是否有意义均可。
weight的斜率:对应的估计值为-0.3293,p值=0.4345。意味着,将含有weight的多重线性模型与不含weight的简单线性模型进行比较, 该多重线性模型的预测效果并不优于简单线性模型。
tail的斜率:对应的估计值为1.6470,p值0.0219(具有显著性)。意味着,将含有tail的多重线性模型与不含tail的简单线性模型进行比较, 该多重线性模型的预测效果优于简单线性模型。
注意:因为该模型为多重线性模型,故对斜率的检验结果与对模型整体的检验结果不等价,我们更应该关注模型中各个参数的检验结果。
结果:基于以上讨论,如果我们想要节省时间和金钱,也许我们只需要测量小鼠尾长以预测小鼠体积。
5.小结
这一小节,我们将理论知识运用到实际案例解读中,主要内容是跟着视频中的示例进行操作,并学习了拟合模型的结果解读。
参考视频:
1.https://www.youtube.com/watch?v=zITIFTsivN8&list=PLblh5JKOoLUIzaEkCLIUxQFjPIlapw8nU&index=3
2.https://www.youtube.com/watch?v=u1cc1r_Y7M0&list=PLblh5JKOoLUIzaEkCLIUxQFjPIlapw8nU&index=6
3.https://www.youtube.com/watch?v=hokALdIst8k&list=PLblh5JKOoLUIzaEkCLIUxQFjPIlapw8nU&index=7
编辑:吕琼
校审:罗鹏